AWS SSO の管理委任機能を利用した際に委任先アカウントでできない事を整理してみた
こんにちは、大前です。
先日のアップデートで AWS SSO の管理を管理アカウント以外に委任できる様になりました。
管理アカウントから役割を引き剥がせる嬉しいアップデートなので利用を検討するケースが多いかと思いますが、委任されたアカウントでは一部の操作が制限されています。公式ドキュメントでは、委任されたアカウントで実行できない操作は以下の 5つとされています。
対象の操作 | 委任されたアカウント | 管理アカウント |
---|---|---|
管理アカウントでプロビジョニングされた権限セットを管理する | x | ○ |
AWS SSO を有効にする | x | ○ |
AWS SSO 設定を削除する | x | ○ |
管理アカウントに対するユーザーアクセスを有効または無効にする | x | ○ |
AWS SSO の委任解除 | x | ○ |
参考 : Delegated administration - AWS Single Sign-On
以下 3つの操作については、「まぁ委任先のアカウントでは出来ないよね」となり理解しやすいです。
- AWS SSO を有効にする
- AWS SSO 設定を削除する
- AWS SSO の委任解除
一方で、以下 2つの操作については具体的に何が出来ないのかパッと見では理解できませんでした。「委任先のアカウントから管理アカウントに関連するアクセス権限をいじれたら良くない」という意図は想像できるのですが、具体的なアクションのイメージが難しいと感じました。
- 管理アカウントに対するユーザーアクセスを有効または無効にする
- 管理アカウントでプロビジョニングされた権限セットを管理する
AWS SSO 管理の委任先アカウントで制限されている上記 2つの操作について、具体的に何ができて、何ができないか整理してみました。
調べてみた
実際に AWS SSO の管理を他アカウントに委任した状態で、委任先のアカウントでどんなアクションが制限されているのか確認していきます。
委任の具体的な手順については下記ブログなどを参照ください。
また、ID ストアも含め AWS SSO で完結している形になります。
「管理アカウントに対するユーザーアクセスを有効または無効にする」について
文章的にユーザーへの権限割り当てに関する操作に見えるため、委任先のアカウントから管理アカウントに対して権限を割り当ててみようとしてみます。
AWS SSO のコンソール画面より「AWS アカウント」を開き、管理アカウントを選択した状態で「ユーザーまたはグループ割り当て」をクリックします。
画面遷移はせず、エラーメッセージが出ました。「管理アカウントに対するユーザー/グループ割り当てや既存のユーザ/グループの変更はできない」 と言い換えられそうです。
CLI で権限セットの削除を試みてみましたがこちらも当然エラーになりました。
aws sso-admin delete-account-assignment \ --instance-arn arn:aws:sso:::instance/ssoins-xxxxxxx \ --target-id <管理アカウントのID> \ --target-type AWS_ACCOUNT \ --permission-set-arn arn:aws:sso:::permissionSet/ssoins-xxxxx/ps-xxxxx \ --principal-type GROUP \ --principal-id xxxxx-xxxxxx-xxxx-xxxx-xxxx-xxxxx An error occurred (AccessDeniedException) when calling the DeleteAccountAssignment operation: User: arn:aws:sts::<委任先のアカウントID>:assumed-role/AWSReservedSSO_AWSAdministratorAccess_xxxxx/xxxx@xxxx is not authorized to perform: sso:DeleteAccountAssignment on resource: arn:aws:sso:::account/<管理アカウントのID>
「管理アカウントでプロビジョニングされた権限セットを管理する」について
(筆者の勘違い)管理アカウントで作成しただけの権限セットは委任先でも操作できる
こちらは権限セットに関する制限に見えるため、管理アカウントで一つ権限セットを作成します。
委任先のアカウントに戻り、管理アカウントで作成した権限セットが存在する事を確認します。
詳細画面を開き、「ポリシーをアタッチ」を選択してみます。
与える権限は何でも良いのですが、「AmazonS3FullAccess」を選択しポリシーのアタッチを実行してみます。
アタッチできてしまいました。てっきり「管理アカウントで作成した権限セットは委任アカウントで編集できない」的な制限だと予想していましたが、違う様です。
記載は省略しますが、上記の権限セットを利用してアクセス権限を AWS アカウントに付与することもできました。
管理アカウントで「利用中」の権限セットが委任アカウントで操作できない
作成した権限セットを管理アカウントに対して割り当てる事で、"管理アカウントでプロビジョニングされた権限セット" の状態になります。
管理アカウントに戻り、先ほど作成した権限セット(CreatedAtManagementAccount)を管理アカウントに割り当てます。
すると、権限セットの一覧にて、ステータスが「プロビジョン済み」になることが確認できます。「プロビジョン」というのは権限セットを作成するだけでなく、アカウントへの割り当てまで完了した状態の事と解釈するのが良さそうです。
この状態で再度委任先のアカウントに戻り、権限セットを開くと、警告メッセージが確認できます。また、先ほどまで表示されていた編集ボタン等も見えなくなっていることがわかります。
また、委任アカウントでアカウントへの権限割り当てを実施しようとすると、下記の様に警告メッセージが表示され、管理アカウントでプロビジョニング(=利用)されている権限セットは選択できない形になっていました。
整理すると、以下の様になりそうです。
- 管理アカウントで作成した権限セットは、委任先のアカウントでも編集等可能
- 管理アカウントで利用されている権限セットは委任先のアカウントでは編集を始めアカウントへの割り当てもできない
"どこで作成された権限セットか" ではなく、あくまで "管理アカウントで利用されている権限セット" に対して委任先のアカウントからの操作が制限されている様です。
おわりに
AWS SSO の管理を委任する機能を利用した際に生じる委任先アカウントでの制限について整理してみました。
公式ドキュメントのベストプラクティス には 管理アカウントでのみ使用する権限セットを作成する とありますが、上記制限を理解してから改めてこのベストプラクティスを見直すと、管理アカウントで利用されている権限セットを委任先のアカウントで触ることができないため、ベストプラクティスというより、対応がほぼ必須になる部分だと感じます。
管理アカウントで利用されている権限セットが委任先アカウントでさわれない、という制限は注意が必要そうです。元々管理アカウント専用の権限セットを用意し利用していれば問題ないかと思いますが、もし同じ権限セットを使い回している場合、AWS SSO の委任を行う前に権限セットの整理をしていただくのが良さそうです。
以上、AWS 事業本部の大前でした。